"""
类属性：
    · 类属性就是类对象所拥有的属性，它被该类的所有实例对象所拥有
    · 类属性可以使用类对象 或 实例对象访问
    类属性的优点：
        · 记录的某项数据，始终保持一致时，则定义类属性
        · 实例属性要求每个对象为其单独可批一份内存空间来记录数据，而类属性为全类所共有，仅占用一份内存，更加节省内存空间
修改类属性：
     类属性只能通过类对象修改，不能通过实例对象修改，如果通过实例对象修改类属性，表示的是创建了一个实例属性
"""

# 1、设置和访问类属性
class Dog:
    # 设置类属性
    tooth = 10
    # 实例属性
    def __init__(self,name):
        self.name = name

wangcai = Dog("旺财")
laifu = Dog("来福")

"""调用类属性：类属性可以被类和实例对象直接调用"""
print(Dog.tooth)    # 被类调用
print(wangcai.tooth)    # 被实例调用

# 调用实例属性：类无法调用实例属性
# print(Dog.name) # AttributeError: type object 'Dog' has no attribute 'name'

"""实例对象可以调用自身的实例属性"""
print(wangcai.name)
print(laifu.name)

# 来福啃骨头累掉了两颗牙齿
laifu.tooth = 8 # 实例对象不能直接修改类属性，这一行只是新增了一个自己对象的实例属性
print(laifu.tooth)  #只有laifu的牙齿是8颗，其余的还都是10颗
print(wangcai.tooth)
print(Dog.tooth)

"""类可以直接更改类属性"""
# 现在狗类全都增加了两颗牙齿
Dog.tooth = 12
print(Dog.tooth)
print(laifu.tooth)  # 唯独laifu没增加，因为他上面已经被定义了8颗牙齿了。
print(wangcai.tooth)


